package com.kwt.learn.dynamicproxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 动态代理类
 *
 * @param <T>
 */
public class JdkProxy<T> implements InvocationHandler {

    private T target;

    public JdkProxy(T target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //过滤不需要该业务的方法
        //调用前验证权限
        System.out.println("调用前验证权限");
        //调用目标对象的方法
        //记录日志数据

        return method.invoke(target, args);

    }


    public T creatProxy() {
        return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    }
}
